pub fn odd_fibnacci_sum(threshold: u32) -> u32 {
    // 处理两个特殊情况
    if threshold <= 1 {
        return 0;
    }
    else if threshold <= 3 {
        return 2;
    }
    
    // 对于夫波拉契数列的奇数元素有以下规律:
    // 1. a[n+2] = 2*a[n+1] + a[n]
    // 2. a[n+3] = a[n+2] + a[n+1] + a[n]

    // sign 为 true 使用第二个递推公式否则使用第一个
    let mut sign = true;
    let mut a0 = 1;
    let mut a1 = 1;
    let mut a2 = 3;
    let mut a3 = 0;
    let mut sum = 5;
    while a3 <= threshold {
        sum += a3;

        if sign {
            a3 = a0 + a1 + a2;
        }
        else {
            a3 = 2*a2 + a1;
        }

        a0 = a1;
        a1 = a2;
        a2 = a3;

        sign = !sign;
    }

    return sum;
}
